package cz.pecinovsky.česky.oopnz._115_;
//Příliš žluťoučký kůň úpěl ďábelské ódy

import cz.pecinovsky.česky.oopnz.správce.IKreslený;
import cz.pecinovsky.česky.oopnz.správce.Kreslítko;
import cz.pecinovsky.česky.oopnz.správce.Obdélník;

import cz.pecinovsky.česky.oopnz.utility.Barva;

// %I+ =116z
//import cz.pecinovsky.česky.oopnz.tvary_03_implementují_ITvar.Elipsa;
// %I-
// %I+ <119
//import cz.pecinovsky.česky.oopnz.tvary_03_implementují_ITvar.Obdélník;
// %I-

import cz.pecinovsky.česky.oopnz.utility.IO;


import static cz.pecinovsky.česky.oopnz._115_.Světlo_117_119.Světlo;

////////////////////////////////////////////////////////////////////////////////
//%%+  +++++ Konec ignorovaného počátečního textu +++++
//%X+ xxxxx Začátek přeskakovaného textu xxxxx
/*******************************************************************************
 *<pre>
 * Předchozí:   Není - toto_je_nově_definovaná_třída
 *
 * Následující: oopnz._115_._120_Semafor_
 *
 * Projekt  Ppp
 *   + Přidáno
 *   - Odebráno
 *   ~ Změněno
 *</pre>
 *
 * @author Rudolf PECINOVSKÝ
 * @version 6.03.2017 — 2010-11-08
 */
public class Semafor_116_119
{    private Semafor_116_119() {}   static
////////////////////////////////////////////////////////////////////////////////
//%X- ----- Konec přeskakovaného textu -----


//%I+ <119
//public class Semafor
//%I-
//%X+ <119
public class Semafor implements IKreslený
//%X-
{
//%X+ <118
    private Obdélník krabice;
    private Světlo   červená;
    private Světlo   žlutá;
    private Světlo   zelená;


//%X-
    public Semafor()
    {
//%I+ =116z
//        new Obdélník(0,   0, 50, 150, Barva.ČERNÁ  );
//        new Elipsa  (0,   0, 50,  50, Barva.ČERVENÁ);
//        new Elipsa  (0,  50, 50,  50, Barva.ŽLUTÁ  );
//        new Elipsa  (0, 100, 50,  50, Barva.ZELENÁ );
//%I-
//%I+ =117z
//        new Obdélník(0,   0, 50, 150, Barva.ČERNÁ  );
//        new Světlo  (0,   0, Barva.ČERVENÁ);
//        new Světlo  (0,  50, Barva.ŽLUTÁ  );
//        new Světlo  (0, 100, Barva.ZELENÁ );
//%I-
//%X+ <118
        krabice = new Obdélník(0,   0, 50, 150, Barva.ČERNÁ);
        červená = new Světlo  (0,   0, Barva.ČERVENÁ);
        žlutá   = new Světlo  (0,  50, Barva.ŽLUTÁ  );
        zelená  = new Světlo  (0, 100, Barva.ZELENÁ );
//%X-
    }
//%X+ <117


    public Semafor(int x, int y)
    {
//%X-
//%I+ =117z
//        new Obdélník(x, y+  0,  50, 150, Barva.ČERNÁ);
//        new Světlo  (x, y+  0, Barva.ČERVENÁ);
//        new Světlo  (x, y+ 50, Barva.ŽLUTÁ  );
//        new Světlo  (x, y+100, Barva.ZELENÁ );
//%I-
//%X+ <118
        krabice = new Obdélník(x, y+  0,  50, 150, Barva.ČERNÁ);
        červená = new Světlo  (x, y+  0, Barva.ČERVENÁ);
        žlutá   = new Světlo  (x, y+ 50, Barva.ŽLUTÁ  );
        zelená  = new Světlo  (x, y+100, Barva.ZELENÁ );
//%X-
//%X+ <117
    }


    public Semafor(int x, int y, Barva barvaKrabice)
    {
//%X-
//%I+ =117z
//        new Obdélník(x, y+  0,  50, 150, barvaKrabice);
//        new Světlo  (x, y+  0, Barva.ČERVENÁ);
//        new Světlo  (x, y+ 50, Barva.ŽLUTÁ  );
//        new Světlo  (x, y+100, Barva.ZELENÁ );
//    }
//%I-
//%X+ <118
        krabice = new Obdélník(x, y+  0,  50, 150, barvaKrabice);
        červená = new Světlo  (x, y+  0, Barva.ČERVENÁ);
        žlutá   = new Světlo  (x, y+ 50, Barva.ŽLUTÁ  );
        zelená  = new Světlo  (x, y+100, Barva.ZELENÁ );
    }


    public void stůj()
    {
        červená.rozsviť();
        žlutá  .zhasni();
        zelená .zhasni();
    }


    public void připravit()
    {
        červená.rozsviť();
        žlutá  .rozsviť();
        zelená .zhasni();
    }


    public void volno()
    {
        červená.zhasni();
        žlutá  .zhasni();
        zelená .rozsviť();
    }


    public void pozor()
    {
        červená.zhasni();
        žlutá  .rozsviť();
        zelená .zhasni();
    }


    public void zhasni()
    {
        červená.zhasni();
        žlutá  .zhasni();
        zelená .zhasni();
    }


    public void cyklus(int stůj, int připravit, int volno, int pozor, int nic)
    {
        stůj();         IO.čekej(stůj);
        připravit();    IO.čekej(připravit);
        volno();        IO.čekej(volno);
        pozor();        IO.čekej(pozor);
        zhasni();       IO.čekej(nic);
    }


    public void cyklus()
    {
        cyklus(500, 500, 500, 500, 0);
    }
//%X-
//%X+ <119


    /***************************************************************************
     * Prostřednictvím dodaného kreslítka vykreslí obraz své instance.
     *
     * @param kreslítko Kreslítko, které nakreslí instanci
     */
    @Override
    public void nakresli(Kreslítko kreslítko)
    {
        krabice.nakresli(kreslítko);
        červená.nakresli(kreslítko);
        žlutá  .nakresli(kreslítko);
        zelená .nakresli(kreslítko);
    }
//%X-
}

//%%-  ----- Začátek ignorovaného závěrečného textu -----
////////////////////////////////////////////////////////////////////////////////

//== TESTY A METODA MAIN =======================================================
//
//    /***************************************************************************
//     * Testovací metoda.
//     */
//    public static void test()
//    {
//        new Semafor();
//        new Semafor(100, 100);
//        new Semafor(200,  50, Barva.HNĚDÁ);
////        System.exit(0);
//    }
//    /** @param args Parametry příkazového řádku - nepoužívané. */
//    public static void main( String[] args )  {  test();  }
}
